Programmable integrated circuits (ICs) are a well-known type of integrated circuit (IC) that can be programmed to perform specified logic functions. One type of programmable IC, the field programmable gate array (FPGA), typically includes an array of programmable tiles. These programmable tiles can include, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing blocks (DSPs), processors, clock managers, delay lock loops (DLLs), and so forth.
Each programmable tile typically includes both programmable interconnect and programmable logic. The programmable interconnect typically includes a large number of interconnect lines of varying lengths interconnected by programmable interconnect points (PIPs). In general, a PIP refers to a circuit component or mechanism that programmably connects or isolates two routing elements, e.g., wires or nodes, of a circuit within a programmable IC. The programmable logic implements the logic of a user design using programmable elements that can include, for example, function generators, registers, arithmetic logic, and so forth.
The programmable interconnect and programmable logic are typically programmed by loading a stream of configuration data into internal configuration memory cells that define how the programmable elements are configured. The configuration data can be read from memory (e.g., from an external PROM) or written into the FPGA by an external device. The collective states of the individual memory cells then determine the function of the FPGA.
Some applications require that portions of the system be implemented in triplicate to improve reliability. This technique, referred to as triple modular redundancy (TMR), seeks to eliminate single points of failure within a circuit design. For example, systems that are to be used within harsh operating environments may require that one or more circuits critical to continued and proper operation of the system be implemented using TMR. A voting circuit can be used to select the majority result, as determined from the output of each of the three instances of the module implemented using TMR, referred to as the “TMR module.” An “instance” of a TMR module refers to a single one of the three implementations of a TMR module, or to a single implementation of any module implemented using redundancy of any sort. TMR can improve the ability of a system to function properly despite the occurrence of faults, whether accidental or malicious in nature.
When implementing a TMR module, each instance of that TMR module must be isolated from each other instance of the TMR module. Isolation of instances of a TMR module means that the occurrence of a fault within one instance of the TMR module is independent of whether a fault occurs within any other instance of the TMR module. Proceeding with the presumption that the probability of a single failure is low, then the probability of two independent failures, each occurring within a different instance of the same TMR module, will be even lower. This increases the likelihood that the majority result selected by the voting mechanism will be the intended or correct result.
The conventional technique for achieving isolation in a circuit design among instances of a module implemented with any degree of redundancy is to design the system so that each instance of the redundant module is located within a separate, physical, programmable IC. Implementing a system in this manner, using a plurality of programmable ICs for implementation of a single redundant module, may add significant cost and complexity to the system design. Further, the resulting system will be physically larger and require more power than if a single programmable IC were used.